package com.xue.control;

import com.xue.bean.AdminInfoBean;
import com.xue.model.IAdminManagerModel;
import com.xue.model.impol.AdminManagerModelImpl;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.annotation.Resource;


/**
 * 在springmvc中，使用注解@Controller表明这个是控制层的类
 */
@Controller
public class AdminManagerControl {
    /**
     * 注解是给jvm的注释：可以参与编译运行，也可以不参与编译运行；
     * Resource注解告诉jvm（jvm使用了spring框架来完成），
     * 此处需要给当前变量进行new赋值操作；
     * 约定：其一：可以使用参数名进行进行匹配；
     *
     * 上面描述的操作，都由spring框架进行承担；
     */
    /**
     * spring框架的ioc（反转控制）或di（依赖注入）
     *
     * ioc（控制反转）：从spring的使用者的角度来说：
     * 本来当前类来使用new创建自己使用的类的实例对象，
     * 将创建所使用的类的实例对象的权限反转给spring框架来完成；
     *
     * di（依赖注入）：从spring的角度来说：
     * spring框架在依赖注入的管理范围内（可以在配置文件中进行配置），
     * 把使用者需要使用的类的实例对象通过映射规则（按类型、按名字），
     * 注入给使用者所声明的变量；
     * （spring框架通过注入方式把使用者声明的变量进行了new初始化）
     *
     * ioc和di是一种机制的两个维度的描述；
     *
     */
    @Resource
    private IAdminManagerModel adminM;


    /**
     * 要求：
     * 方法中的参数需要和前台页面中的表单控件的
     * Name属性值保持一致；
     *
     * @ RequestMapping中的映射路径需要和
     * 前台请求页面中form表单的action属性一致；
     */
    @RequestMapping("/doLogining")
    public String doLogin(String adminName, String adminPsw) {
        // 查看从前台传入的数据
        System.out.println("用户名：" + adminName);
        System.out.println("用户名：" + adminPsw);
        // TODO 调用Model进行登录的业务逻辑处理
        // 根据Model层业务逻辑处理的结果，返回对应的视图解析的名字
        // WEB-INF/pages/logined.jsp
        return "logined";
    }

    /**
     * 映射要求：
     * 如果方法中的参数是一个实体类类型，则
     * 要求实体类的成员变量名和和前台页面中的表单控件的
     * Name属性值保持一致；
     */
    @RequestMapping("/doLogining2")
    public String doLogin2(AdminInfoBean adminB) {
        {
            // 查看从前台传入的数据
            System.out.println("用户名："+adminB.getAdminname());
            System.out.println("用户名："+adminB.getAdminpsw());// 调用Model进行登录的业务逻辑处理
            // 调用Model进行登录的业务逻辑处理
            //   IAdminManagerModel adminM = new AdminManagerModelImpl();
            // 调用业务逻辑层的登录验证方法
            boolean isLogined = adminM.doAdminLogin(adminB);
            // 根据Model层业务逻辑处理的结果，返回对应的视图解析的名字
            if (isLogined) {
                // 登录成功
                // 跳转到登录成功页面
                // WEB-INF/pages/logined.jsp
                return "logined";
            } else {
                // 登录失败
                // 跳转到登录页面重新进行登录
                return "../../index";
            }
        }
    }
}